home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Pascal Super Library
/
Pascal Super Library (CW International)(1997).bin
/
LIBRARY
/
PRUS101
/
FDIRBOX.DOK
< prev
next >
Wrap
Text File
|
1994-12-18
|
11KB
|
231 lines
Paul Schubert
Rottweiler Str. 8
60327 Frankfurt / M
Tel.: 069 / 231145
Fido 2:244/1181.18
Beschreibung des Moduls FDIRBOX
───────────────────────────────
Frankfurt, 18.12.94
Diese DOC war nicht für FDIRBOX gedacht sondern für eine funktionsgleiche
UNIT, die mit CRT arbeitet - ich hoffe, es gibt keine Diskrepanzen.
Bei der UNIT DIRBOX handelt es sich um eine Fileselektorbox.
DIRBOX dürfte auch in Grafik Videomodi einsetzbar sein, ich garantiere
aber nicht dafür, daß dieser Versuch brauchbare Ergebnisse zeitigt. In
jedem Fall muß das Hauptprogramm USES CRT enthalten und vor Aufruf von
SELECTFILE ein DIRECTVIDEO := FALSE;
Das Sichern und Restaurieren des Bildschirms funktioniert in den Grafik
Videomodi auf keinen Fall.
DIRBOX wird wie folgt benutzt :
USES DIRBOX;
VAR Filename : STRING;
Filename := SELECTFILE(Pfad,Filespezifikation);
z.B. : Filename := SELECTFILE('C:\TP','*.*');
IF Filename = '' THEN { kein Filename selektiert ( <Esc> ) };
SELECTFILE benutzt das im Hauptprogramm eingestellte WINDOW, der alte
Bildschirminhalt wird von SELECTFILE gesichert und und nach getaner Arbeit
wiederhergestellt.
Es ist natürlich nicht möglich, daß in einem beliebig kleinen Fenster
eine Auswahlliste dargestellt wird, deshalb vergrößert SELECTFILE das
aktuelle WINDOW, wenn dies nötig ist auf das minimal nötige Maß.
Die Bedienung der File Selektorbox ist einfach :
Mit den Cursortasten oder der Maus wird ein Filename, Directory oder
Laufwerksbezeichner ausgewählt; die Steuertasten <Bild auf>, <Bild ab>,
<Pos 1> und <Ende> haben die übliche Funktion.
Durch Eingabe von Buchstaben kann nach einem Dateinamen gesucht werden;
die Leertaste, Backspace oder eine Cursortaste / Mausbewegung löschen den
Suchbegriff. Der Suchbegriff wird unten im Rahmen angezeigt.
<Ret> oder die linke Maustaste haben folgende Funktion :
Ist ein Filename ausgewählt, wird dieser ans Hauptprogramm übergeben und
die Fileselektorbox verlassen.
Ist ein Unterverzeichnis ausgewählt, schaltet DIRBOX auf dies Verzeichnis
um.
Ist ein Laufwerksbezeichner ausgewählt, versucht DIRBOX, auf das Wurzel-
verzeichnis des Laufwerks umzuschalten. Ist dies nicht möglich ( z.B. keine
Diskette eingelegt ), ertönt ein Pieps und das aktuelle Verzeichnis bleibt
erhalten.
<Esc> oder die rechte Maustaste beenden die Selektorbox ohne einen
Dateinamen auszuwählen; an das Hauptprogramm wird ein leerer String über-
geben.
Die in EXITKEYS definierten Tasten führen zum Verlassen der Auswahlbox.
In diesem Fall enthält EXITKEY die Position des Tastencodes im Array
EXITKEYS.
Mit der Taste <Tab> kann die Anzeigeart umgeschaltet werden; folgende
Anzeigearten sind möglich :
1 - Nur Dateiname ( Voreinstellung )
2 - Dateiname und Größe
3 - Dateiname, Größe, Datum / Uhrzeit
4 - Dateiname, Attribute, Größe, Datum / Uhrzeit
Mit der Leertaste können mehrere Dateien markiert werden. Die Leertaste
schaltet die Marke für die Datei um, auf der der Cursor steht.
<Ctrl-T> markiert alle Dateien
<Ctrl-U> löscht alle Marken
Vor Beenden der Prozedur SELECTFILE oder beim Laufwerks / Verzeichnis-
wechsel werden alle so markierten Filenamen einzeln der Prozedurvariablen
PRINTNAME übergeben. Es wird der Filename einschließlich des kompletten
Pfads auf PRINTNAME ausgegeben.
Das Hauptprogramm kann PRINTNAME auf eine eigene Prozedur umleiten, z.B. um
eine Dateiliste in ein File zu schreiben. Ohne Definition einer eigenen
Prozedur PRINTNAME können die Marken nur als Lesezeichen benutzt werden.
Die Ausgabe der markierten Namen erfolgt unabhängig davon, ob SELECTFILE
mit <Ret> oder <Esc> beendet wird.
In DIRBOX.PAS ist PRINTNAME wie folgt deklariert :
VAR PRINTNAME : PROCEDURE(S:STRING);
und auf eine leere Prozedur gelegt. Benutzt werden kann PRINTNAME wie folgt:
VAR F : TEXT;
{$F+}PROCEDURE LISTE_AUSGEBEN(NAME:STRING);{$F-}
BEGIN
WRITELN(F,NAME);
{ SCHREIBT EINEN AUSGEWÄHLTEN FILENAMEN EINSCHLIEßLICH DES VOLLSTÄNDIGEN
PFADS IN DATEI 'LISTE.TXT' }
END; { LISTE_AUSGEBEN }
BEGIN
PRINTNAME := LISTE_AUSGEBEN;
ASSIGN(F,'LISTE.TXT');
REWRITE(F);
...
CLOSE(F);
END.
DIRBOX stellt im Wurzelverzeichnis jedes Laufwerks die Liste der logischen
Laufwerke zur Auswahl, auf die momentan zugegriffen werden kann. D.h. auch
Laufwerke, die mit ASSIGN und SUBST 'erzeugt' wurden, aber keine Laufwerke,
für die nur ein Treiber vorhanden ist (z.B. nicht aktive Netzwerk Laufwerke),
jedoch auch Disketten- und Wechselplattenlaufwerke, unabhängig davon, ob eine
Diskette bzw. ein Medium eingelegt ist oder nicht.
Wurde ein Dateiname ausgewählt, merkt sich DIRBOX ihn und positioniert
beim nächsten Aufruf von SELECTFILE den Cursor auf diesen Namen oder, wenn
er nicht gefunden wird, auf den nächstniedrigeren in der alphabetischen
Sortierfolge.
Soll dies unterbunden werden, kann vor Aufruf von SELECTFILE die Variable
SUCHENACH auf '' gesetzt werden.
Sie können auch vor dem ersten Aufruf von SELECTFILE der Variablen
SUCHENACH einen Wert zuweisen, um den Cursor in der Auswahlliste vorab zu
positionieren.
In der Anzeige werden Laufwerke durch eine Raute und Unterverzeichnisse
durch ein Rechteck gekennzeichnet. Diese Kennzeichner können vom Haupt-
programm verändert werden; beachten Sie, daß diese Marken in die Sortier-
reihenfolge mit eingehen !
CONST DIRMARK : CHAR = #254; ist die Marke für Unterverzeichnisse
DRIVEMARK : CHAR = #4; ist die Marke für Laufwerke
DIRMARK und DRIVEMARK dürfen auf keinen Fall den selben Wert haben !
Im Zweifelsfall können Sie
DIRMARK := #255; und
DRIVEMARK := ' ';
einstellen; dann werden beide als Leerzeichen dargestellt, aber nach wie
vor die Laufwerke vorne und die Unterverzeichnisse hinten einsortiert.
Oder aber
DIRMARK := ' '; und
DRIVEMARK := #0;
wieder werden beide als Leerzeichen dargestellt, die Sortierfolge ist aber
zuerst die Laufwerke, dann Unterverzeichnisse und zuletzt Files.
FDIRBOX benutzt die UNIT GETDRVS, um die vorhandenen logischen Laufwerke
festzustellen.
Wer DIRBOX in Programmen zusammen mit TPCRT benutzen will, muß den Compiler-
schalter {$DEFINE USETPCRT} im Quellfile aktivieren.
Soll DIRBOX keine Maus benutzen, muß der Compilerschalter {$DEFINE USEMOUSE}
deaktiviert werden.
Ein weiterer Compilerschalter {$DEFINE SPDISP} ermöglicht es, beim Compilieren
festzulegen, in welcher Form die Anzeige erfolgt : Ist SPDISP definiert,
werden die Filenamen in sortierter Folge untereinander angezeigt, d.h. in der
linken Spalte von der ersten bis zur letzten Zeile und der nächste Name in
der ersten Zeile der 2. Spalte, sonst in sortierter Folge nebeneinander, d.h.
zuerst alle Spalten in der ersten Zeile, dann jeweils die nächste Zeile.
DIRBOX enthält noch weitere Besonderheiten :
Es können bis zu 5 Strings angegeben werden, um bestimmte Dateinamen von
der Anzeige auszuschließen und bis zu 5 Strings, um nur nach bestimmten
Dateinamen zu suchen :
CONST EXCLUDE : ARRAY[1..ANZINCLUDE] OF STRING[12] = ('','','','','');
INCLUDE : ARRAY[1..ANZINCLUDE] OF STRING[12] = ('','','','','');
Sie können z.B.
INCLUDE[1] := '.PAS';
INCLUDE[2] := '.TPU';
angeben, um nur Files mit der Erweiterung .PAS und .TPU angezeigt zu erhalten
oder
EXCLUDE[1] := '.BAK';
um die Files mit Erweiterung .BAK von der Anzeige auszuschließen.
In INCLUDE[] und EXCLUDE[] dürfen keine '*' und '?' angegeben werden, wie
es sonst bei Filespezifikationen üblich ist. Der gleichzeitige Gebrauch von
INCLUDE und EXCLUDE wird vermutlich keine sinnvollen Ergebnisse liefern.
Ist der Filenamen Parameter bei Aufruf von SELECTFILE '*.*', werden die
Inhalte von INCLUDE[] in der Kopfzeile der Auswahlbox angezeigt.
Wenn Sie größere Listen für INCLUDE und / oder EXCLUDE brauchen, können
Sie die Konstante CONST ANZINCLUDE = 5; im Quellcode verändern.
Um es zu ermöglichen, die Auswahlliste mit anderen Tasten als <Ret> und
<Esc> zu verlassen, können im Array EXITKEYS weitere Tasten definiert werden.
Damit die Auswahlbox für verschiedene Funktionen benutzt werden kann, z.B.
<Ret> = Anzeigen, <F1> = Editieren, <F2> = Löschen, <F3> = Umbenennen,
liefert SELECTFILE auch beim Verlassen mittels eines EXITKEYS den ausge-
wählten Dateinamen.
Im Hauptprogramm kann anhand der Variablen EXITKEY festgestellt werden,
mit welcher Taste SELECTFILE beendet wurde. EXITKEY gibt den Index im
Array EXITKEYS an, beginnend mit 1, d.h.
EXITKEY = 0 -> SELECTFILE wurde mit <Ret> oder <Esc> verlassen
EXITKEY = 1 -> SELECTFILE wurde mit EXITKEYS[1] verlassen usw.
In EXITKEYS werden 16 Bit Werte eingetragen, die als höherwertiges Byte
den Scancode und als niederwertiges Byte den ASCII Wert einer Taste enthalten,
z.B. für <F1> : EXITKEYS[1] := 59 SHL 8; bzw. EXITKEYS[1] := $3B00;
Die Bildschirmattribute ( Farben ) sind in den folgenden 6 typisierten
Konstanten abgelegt, die vom Hauptprogramm verändert werden können :
CONST TANONSEL : BYTE = $0F; { TEXTATTRIBUT NICHT SELEKTIERT }
TASELECT : BYTE = $70; { TEXTATTRIBUT SELEKTIERT }
TARAND : BYTE = $1E; { TEXTATTRIBUT RAHMEN UM DIE AUSWAHLLISTE }
TATITEL : BYTE = $5E; { TEXTATTRIBUT DES TITELS (PFAD / ANZAHL FILES) }
TATAGED : BYTE = $0C; { markierte Namen }
TATAGEDS : BYTE = $74; { markierte Namen, auf denen der Cursor steht }
Die oben beschriebenen 4 Anzeigemodi können vor dem ersten bzw. vor jedem
Aufruf von SELECTFILE explizit mittels der Variablen DIRDISPLAYMODE einge-
stellt werden :
DIRDISPLAYMODE := 1; Nur Dateiname -> Voreinstellung
DIRDISPLAYMODE := 2; Dateiname und Größe
DIRDISPLAYMODE := 3; Dateiname, Größe, Datum / Uhrzeit
DIRDISPLAYMODE := 4; Dateiname, Attribute, Größe, Datum / Uhrzeit
Als Voreinstellung können sowohl Unterverzeichnisse als auch andere logische
Laufwerke angewählt werden.
Ist dies nicht erwünscht, kann mit
DRIVESALLOWED := FALSE; der Wechsel auf ein anderes Laufwerk und mit
DIRSALLOWED := FALSE; der Verzeichniswechsel unterbunden werden.
DIRBOX ist bei weitem noch nicht zu ende entwickelt; im laufe der Zeit
werde ich gewiß noch einige Verbesserungen an dieser UNIT vornehmen.